You've probably seen the phrase "Don't reinvent the wheel" thrown around in programming discussions before. There are certainly contexts where that matters, but it's not a universal truth. I want to address that voice in the back of your head who may be holding you back.
Imagine if I applied the "don't reinvent the wheel" mindset to other disciplines. It would make no sense at all in some cases. "Don't draw that bowl of fruit, cover that Hendrix song, or build that wooden chair. Those things already exist!" We all understand how ridiculous that would be since we recognize that those are valuable learning experiences, as well as enjoyable activities for some people.
You can apply this to many other things as well, not just creative pursuits. There are so many products which cost as much or more than the cost to build them yourself. Need a place to store your tools? Well you probably want a shed for your yard. You can buy one for $600, or you can build one for as just much, if not more. It's easy to rationalize buying the shed, but you can't learn to build a shed that way. You have to do it yourself. And the skills you would hone by building the shed apply to other things you can build in the future. If you don't value those skills, then fine, buy the shed, but do not rationalize away the inherit value of learning to do that.
Software engineering is no different. You need to reinvent the wheel to learn, otherwise you are just plumbing together parts built by better developers who, guess what, probably reinvented the wheel themselves to get where they are now. If you choose to be the plumber, then you must accept that your growth in your discipline will be slow, if not totally stagnant. And this might ruffle some feathers, but the "engineer" in your title also doesn't represent your abilities. If ever there were a class of developers which LLMs or some other form of narrow AI could replace, it would be that one.
Now I do realize that the job is far more complex that that. Complicated build systems, demanding product managers, retrofitting new features, bugs from complex interactions between systems, etc., these things are part of the reality of software development. I'm just trying to make the point that, if you want to actually be good at the engineering part, you must throw out the dogma and build things.
You must reinvent the wheel to level up in your field, and on top of that, you must reinvent the wheel to be able to tackle the more complex problems as they arise, because they will often require some baseline skill level that you otherwise would not have. This will increase your ability, and thus your value, as a software developer, and it will also increase you confidence in your field. Personally, I think it feels bad to not understand how the tools I use work under the hood. The more I build, the more I understand about software development as a whole, the less things feel like magic, and the better I feel about myself as a developer.
Now if your goal is to get your foot in the industry door, then you should focus on learning the libraries and frameworks which companies expect from a new hire. But if you are past that point and are still avoiding building things from scratch, then you are doing yourself a disservice. Maybe you lack the motivation, or don't know where to start. There is a simple solution for both of those problems. Start with something that is interesting with you, and is already solved. Reinvent it yourself. Don't copy/paste code from an LLM or follow an example because that defeats the purpose of the whole exercise.
Throwing away the dogma and choosing an interesting project will go a long way toward keeping you motivated and on track. Pick something exciting and don't worry about whether or not your implementation will be good enough to stand alongside existing solutions, as that isn't the point. It's about doing it for the sake of doing it. Be unapologetic in that regard, and remember your goal. Be enthusiastic, and share your enthusiasm with others.
Personally, I am building a game engine with C++. It's not publicly available because no one should be using it, and it's meant to be a learning experience. And what an experience it has been! I've learned so much about memory management, performance, compilers, and the C++ type system. It's not all great, as there are things like cmake and the C++ docs dragging it down. But it has overall been an incredible experience.
I have pulled out part of the engine to be its own library, because I thought it turned out really well, and I enjoyed using it so much that I thought other developers might enjoy it as well. This was only possible since I chose something interesting to me. It doesn't need to exist, and there are many better options for people who are serious about game development, but developing it has been its own reward.
I don't know if the whole engine will ever be publicly available, or even finished. Either way, if I were to decide I wanted to build a serious video game, I would probably choose an existing game engine with so many of the problems already solved. The fate of the project just doesn't matter. It's purpose is to keep my attention long enough that I can grow as a developer.
Reinvent the wheel. Do fun things, push yourself, and become a better developer. Don't worry about making mistakes or criticism. That wheel won't be perfect. I may be imbalanced, have a flat spot, or be missing a spoke. Or who knows, it may the best wheel out there that no one uses. Either scenario is fine anyway, because the journey and destination are one and the same.